/**
 * 日常任务模块
 * 点进任务查看是否存在未完成的任务, 如果存在, 则寻找前往按钮, 然后针对各个任务进行完成。
 */
let isUtilsLoaded = false
var utils = { autoJSUtil: null, gestureUtil: null, imageUtil: null }

function main() {
    // 优先其他的模块
    const levelingModuleStorage = storages.create('levelingModuleStorage')
    const mailPullModuleStorage = storages.create('mailPullModuleStorage')
    if (!levelingModuleStorage.get('complete') || !mailPullModuleStorage.get('complete')) {
        console.error('优先其他日常操作')
        return
    }

    const dailyTaskModuleStorage = storages.create('dailyTaskModuleStorage')
    console.warn('日常模块执行...', dailyTaskModuleStorage.get('task1'), dailyTaskModuleStorage.get('task2'))
    if (dailyTaskModuleStorage.get('complete')) {
        console.warn('今日任务已完成...')
        return
    }
    if (!isUtilsLoaded) {
        loadUtils()
        isUtilsLoaded = true
    }
    console.error(utils)
    // 业务逻辑
    const taskIconPos = utils.imageUtil.findImageInCapture('task/task-icon.png')
    if (taskIconPos) {
        sleep(2000)
        const taskIconPos2 = utils.imageUtil.findImageInCapture('task/task-icon.png')
        if (taskIconPos2) {
            click(taskIconPos.x + 10, taskIconPos.y + 10)
        }
    } else {
        const everydayPos = utils.imageUtil.findImageInCapture('task/everyday.png')
        if (everydayPos) {
            sleep(500)
        } else {
            return
        }
    }
    // 如果可以点击一件领取, 先领取一波再说
    const pull = utils.imageUtil.findImageInCapture('task/pull-all.png')
    if (pull) {
        click(pull.x, pull.y)
        sleep(1000)
        goback()
        return
    }
    // 根据当前没有完成的任务进行执行
    if (!dailyTaskModuleStorage.get('task1')) {
        exeTask1(dailyTaskModuleStorage)
    } else if (!dailyTaskModuleStorage.get('task2')) {
        exeTask2(dailyTaskModuleStorage)
    }

    // 判断是否已经完成了钻石任务, 完成了标志状态不再执行
    let completeTask = utils.imageUtil.findImageInCapture('task/complete-task.png', 0.9)
    if (completeTask) {
        dailyTaskModuleStorage.put('complete', true)
        goback()
    } else {
        randomSwipe()
        completeTask = utils.imageUtil.findImageInCapture('task/complete-task.png', 0.9)
        if (completeTask) {
            dailyTaskModuleStorage.put('complete', true)
            goback()
        }
    }
}

function exeTask2(dailyTaskModuleStorage) {
    const pos2 = utils.imageUtil.findImageInCapture('task/2.png', 0.8)
    if (pos2) {
        // 在一定高度范围范围找前往, 找到了点击, 否则标记任务已完成
        const goIcon2 = utils.imageUtil.getImage('task/go.png')
        const point2 = findImage(captureScreen(), goIcon2, {
            region: [pos2.x, pos2.y, 1200, 80],
            threshold: 0.7 // 相似度
        })
        if (point2) {
            sleep(1500)
            click(point2.x, point2.y)
            sleep(4000)
            drawCard()
        } else {
            // 标记任务二已经完成
            dailyTaskModuleStorage.put('task2', true)
        }
    }
}

function exeTask1(dailyTaskModuleStorage) {
    const pos1 = utils.imageUtil.findImageInCapture('task/1.png', 0.8)
    if (pos1) {
        // 在一定高度范围范围找前往, 找到了点击, 否则标记任务已完成
        const goIcon = utils.imageUtil.getImage('task/go.png')
        const point = findImage(captureScreen(), goIcon, {
            region: [pos1.x, pos1.y, 1200, 80],
            threshold: 0.7 // 相似度
        })
        if (point) {
            click(point.x, point.y)
            sleep(1500)
            utils.imageUtil.findImageClick('task/cancel.png')
            sleep(500)
            utils.imageUtil.findImageClick('task/cancel.png')
            moppingUp()
        } else {
            // 标记任务一已经完成
            dailyTaskModuleStorage.put('task1', true)
            console.error('---------任务一已完成-------')
        }
    } else {
        randomSwipe()
        sleep(500)
        exeTask1(dailyTaskModuleStorage)
    }
}

/**
 * 进行一次随机的上下滑动
 */
function randomSwipe() {
    random(0, 10) % 2 == 0 ? swipeUp() : swipeDown()
    sleep(1000)
}

function swipeDown() {
    swipe(500, 300, 500, 700, 500)
    return true
}

/**
 * 向上滑动
 */
function swipeUp() {
    swipe(500, 700, 500, 300, 500)
    return true
}

/**
 * 抽卡
 */
function drawCard() {
    utils.imageUtil.findImageClickWait('task/call1.png', 0.7, 1000, 10)
    sleep(2000)
    utils.gestureUtil.swipeDown()
    sleep(5000)
    utils.imageUtil.findImageClickWait('common/skip.png', 0.7, 1000, 20)
    sleep(2000)
    utils.imageUtil.findImageClickWait('task/accect-call.png', 0.7, 1000, 10)
    sleep(1000)
    goback()
}

function goback() {
    const gobackPos = utils.imageUtil.findImageInCapture('task/goback.png')
    if (gobackPos) {
        click(gobackPos.x, gobackPos.y)
    } else {
        const gobackPos2 = utils.imageUtil.findImageInCapture('task/goback-grey.png')
        if (gobackPos2) {
            click(gobackPos2.x, gobackPos2.y)
        }
    }
}

/**
 * 扫荡裂缝
 */
function moppingUp() {
    const pos25w = utils.imageUtil.findImageInCapture('task/25.png')
    if (pos25w) {
        click(pos25w.x, pos25w.y)
    }
    sleep(2000)
    const pos1 = utils.imageUtil.findImageInCapture('task/samsung.png')
    if (pos1) {
        click(pos1.x, pos1.y)
    }
    sleep(2000)
    const saodangPos = utils.imageUtil.findImageInCapture('task/saodang.png')
    if (saodangPos) {
        click(saodangPos.x, saodangPos.y)
    }
    let flag = true
    while (flag) {
        sleep(2000)
        let saodangPos2 = utils.imageUtil.findImageInCapture('task/saodang2.png')
        if (saodangPos2) {
            click(saodangPos2.x, saodangPos2.y)
        }
        sleep(10)
        let saodangOverPos = utils.imageUtil.findImageInCapture('task/saodang-over.png')
        if (saodangOverPos) {
            flag = false
            break
        }
        // 纠错
        if (!saodangPos2 && !saodangOverPos) {
            sleep(2000)
            const pos11 = utils.imageUtil.findImageInCapture('task/samsung.png')
            if (pos11) {
                click(pos11.x, pos11.y)
            }
            sleep(2000)
            const saodangPos22 = utils.imageUtil.findImageInCapture('task/saodang.png')
            if (saodangPos22) {
                click(saodangPos22.x, saodangPos22.y)
            }
        }
    }
    const gobackPos = utils.imageUtil.findImageInCapture('task/goback-grey.png')
    if (gobackPos) {
        click(gobackPos.x, gobackPos.y)
        sleep(1500)
        click(gobackPos.x, gobackPos.y)
        sleep(1500)
        click(gobackPos.x, gobackPos.y)
    }
}

function loadUtils() {
    const configStorage = storages.create('config')
    utils.autoJSUtil = eval(configStorage.get('autoJSUtil'))
    utils.gestureUtil = eval(configStorage.get('gestureUtil'))
    utils.imageUtil = eval(configStorage.get('imageUtil'))
}

main()
